package com.example.mq.mqserver.core;

import jdk.nashorn.internal.ir.ReturnNode;
import lombok.Data;

import java.io.Serializable;
import java.util.UUID;

/**
 * 消息
 */
@Data
public class Message implements Serializable {

    //这两个属性是Message的核心属性
    private BasicProperties basicProperties;
    //这里使用byte类型的正文，是为了能够序列化和反序列化
    private byte[] body;

    //下面是辅助的属性
    //Message后续也会持久化存储，所以需要找到对应的正文部分
    //由于是使用字节来传输数据，所以需要知道起始偏移量和结束偏移量才能知道从哪到哪是一个完整的正文
    //使用下列两个偏移量来进行表示：[offsetBeg,offsetEnd)
    private long offsetBeg = 0;
    private long offsetEnd = 0;

    //使用这个属性表示该消息在文件中是否为有效信息（这里是使用逻辑删除的方式来进行删除消息）
    //0x1表示存在，0x0表示不存在
    private byte isValid = 0x1;

    //这里创建一个工厂方法(不使用构造方法封装对象了)，可以直接通过调用该方法，来直接获得已经封装好的message对象
    //使用UUID生成唯一id
    public static Message createMessageWithId(BasicProperties basicProperties,byte[] body) {
        Message message = new Message();
        if(basicProperties != null) {
            //以T-作为前缀
            basicProperties.setMessageId("T-" + UUID.randomUUID());
            message.setBasicProperties(basicProperties);
        }
        if(body != null) {
            message.setBody(body);
        }

        return message;
    }
}
